package com.condominio.servlet.cpr;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.condominio.facade.Facade;
import com.condominio.model.Pessoa;
 
public class PessoaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    Facade fachada=Facade.getInstance();   

    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
    	//considerar que a unica forma que esse servlet vai ser acessado via get sera pra listagem
    	HttpSession session=request.getSession();
    	if(!session.isNew()){
    		if(session.getAttribute("Usuario")==null) {response.sendRedirect("/Condominio");return;}
    	List<Pessoa> pe=this.listPessoas();
		session.setAttribute("pessoas", pe);
		response.sendRedirect("/Condominio/aplicacao/admin/crudPessoas.jsp");
		return;}
    	else response.sendRedirect("/Condominio");
    }
		
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session=request.getSession();
		boolean err=false;
		
		if (!session.isNew()){
   		if(session.getAttribute("Usuario")==null){ response.sendRedirect("/Condominio");return;}
   		session.setAttribute("erro", err);
		String s=request.getParameter("op");
		char op=s.charAt(0);
		
		
		
		Pessoa p=new Pessoa();
		
		switch(op){
			case 'c':{
				
				String nome=request.getParameter("nome_pessoa");
				String login=request.getParameter("login_pessoa");
				String senha=request.getParameter("senha_pessoa");
				try{
				int privilegio=Integer.parseInt(request.getParameter("priv_pessoa"));
				int ap=Integer.parseInt(request.getParameter("ap_pessoa"));
				
				p.setNome(nome);
				p.setLogin(login);
				p.setSenha(senha);
				p.setPrivilegio(privilegio);
				p.setApartamento(ap);
				err=!cadastrarPessoa(p);
				}catch(NumberFormatException e){
					err=true;
					break;
				}
				
				break;}
			
			case 'r':{
				
				
				
				findPessoa(p);
				break;}
			
			case 'l':{
				List<Pessoa> pe=this.listPessoas();
				request.setAttribute("pessoas", pe);
				RequestDispatcher view=request.getRequestDispatcher("/Condominio/aplicacao/admin/crudPessoas.jsp");
				view.forward(request,response);
				return;
			}
			
			case 'u':{
				String nome=request.getParameter("nome_pessoa");
				String login=request.getParameter("login_pessoa");
				String senha=request.getParameter("senha_pessoa");
				try{
				int privilegio=Integer.parseInt(request.getParameter("priv_pessoa"));
				int ap=Integer.parseInt(request.getParameter("ap_pessoa"));
				Pessoa pe=(Pessoa) session.getAttribute("pessoa");
				p.setNome(nome);
				p.setLogin(login);
				p.setSenha(senha);
				p.setPrivilegio(privilegio);
				p.setApartamento(ap);
				p.setId(pe.getId());
				err=!atualizarPessoa(p);

				}catch(NumberFormatException e){
					err=true;
					break;
				}
				break;
			}
			case 'p':{
				int ap=Integer.parseInt(request.getParameter("ap_pessoa"));
				p.setApartamento(ap);
				Pessoa pes=fachada.findPessoaByAP(p);
				if (pes!=null){
					session.setAttribute("pessoa", pes);
					response.sendRedirect("/Condominio/aplicacao/admin/atualizarPessoa.jsp");
					return;
				}
				err=true;
			}
			
			case 'd':{
				
				
				int ap=Integer.parseInt(request.getParameter("ap_pessoa"));
				p.setApartamento(ap);
				Pessoa logada=(Pessoa)session.getAttribute("Usuario");
				if(p.getApartamento()!=logada.getApartamento())err=!excluirPessoa(p);
				else err=true;
				break;
			}
			
			default :{
				List<Pessoa> pe=this.listPessoas();
				session.setAttribute("pessoas", pe);
				response.sendRedirect("/Condominio/aplicacao/admin/crudPessoas.jsp");
				//RequestDispatcher view=request.getRequestDispatcher("condominos.jsp");
				//view.forward(request,response);
				return;
			}
		}
	
		List<Pessoa> pe=this.listPessoas();
	//	request.setAttribute("pessoas", pe);
		session.setAttribute("pessoas", pe);
		session.setAttribute("erro",err);
	//	RequestDispatcher view=request.getRequestDispatcher("condominos.jsp");
	//	view.forward(request,response);
		response.sendRedirect("/Condominio/aplicacao/admin/crudPessoas.jsp");
		}
		else{
			response.sendRedirect("/Condominio");
		}

	}
	
	public boolean cadastrarPessoa(Pessoa p){
		return fachada.cadastrarPessoa(p);
	}
	public Pessoa findPessoa(Pessoa p){
		return fachada.findPessoa(p);

	}
	public boolean atualizarPessoa(Pessoa p){
		return fachada.atualizarPessoa(p);

	}
	public boolean excluirPessoa(Pessoa p){
		return fachada.excluirPessoa(p);

	}
	private List<Pessoa> listPessoas() {
		return fachada.findAllPessoa();
		
	}


}
